﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using ClickLand.CorporacionPlaza.Presentacion.Contratos.AdministracionEstablecimiento;
using ClickLand.CorporacionPlaza.Presentacion.CorporacionPlazaWS;
using ClickLand.CorporacionPlaza.Presentacion.Presentadores.AdministracionEstablecimiento;
using ClickLand.Web.UI.WebControls;

namespace AdministracionEstablecimiento
{
    public partial class AdministrarEstablecimiento : Page,IAdministrarEstablecimiento
    {
        #region Atributos

        private PresentadorAdministarEstablecimiento _presentador;

        #endregion

        #region Eventos

        /// <summary>Evento de inicializacion de la página.</summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void Page_Init(object sender, EventArgs e)
        {

            _presentador = new PresentadorAdministarEstablecimiento(this);
        }


        /// <summary> Metodo que se ejecuta cuando se carga la pagina por primera vez </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                _presentador.CargarPagina();
                grid_busqueda.Visible = false;
            }
        }


        /// <summary> Metodo que se ejecuta cuando se selecciona el el establecimiento </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GvListaEstablecimientoIndexChange(object sender, EventArgs e)
        {

            int id = Convert.ToInt32(gvListaEstablecimientos.SelectedDataKey.Value);
            _presentador.MostrarDetalle(id);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton regresar de detalle establecimiento </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnRegresarDetalleEstablecimientoOnClick(object sender, EventArgs e)
        {
            mvAdministrarEstablecimiento.SetActiveView(vListarEstablecimiento);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton editar de detalle establecimiento </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnEditarDetalleEstablecimientoOnClick(object sender, EventArgs e)
        {

            _presentador.MostrarEdicion();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton cancelar editar establecimiento </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnCancelarEditarEstablecimientoOnClick(object sender, EventArgs e)
        {
            mvAdministrarEstablecimiento.SetActiveView(vDetalleEstablecimiento);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton acpetar editar establecimiento </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnAceptarEditarEstablecimientoOnClick(object sender, EventArgs e)
        {
            _presentador.MostrarConfirmacion();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de aceptar de la vista de exito de modificacion </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnAceptarExito(object sender, EventArgs e)
        {
            Response.Redirect("AdministrarEstablecimiento.aspx");
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de regresar de la venta de error </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnRegresarErrorOnClick(object sender, EventArgs e)
        {
            mvAdministrarEstablecimiento.SetActiveView(vEditarEstablecimiento);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton siguiente de la paginacion
        /// de la lista de clientes </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnSiguientePaginacionOnClick(object sender, EventArgs e)
        {
            if (gvListaEstablecimientos.PageIndex < gvListaEstablecimientos.PageCount)
                gvListaEstablecimientos.PageIndex++;

            gvListaEstablecimientos.DataSource = Session["listaEstablecimiento"];
            gvListaEstablecimientos.DataBind();
            ConfigurarControles();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton anterior de la paginacion
        /// de la lista de clientes </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnAnteriorPaginacionOnClick(object sender, EventArgs e)
        {
            if (gvListaEstablecimientos.PageIndex > 0)
                gvListaEstablecimientos.PageIndex--;
            gvListaEstablecimientos.DataSource = Session["listaEstablecimiento"];
            gvListaEstablecimientos.DataBind();

            ConfigurarControles();
        }


        /// <summary> Metodo que realiza las operaciones para configurar la visibilidad de los botones
        /// y el texto de información </summary>
        private void ConfigurarControles()
        {
            lblInfoPaginado.Visible = gvListaEstablecimientos.PageCount >= 1;
            lblInfoPaginado.Text = string.Format("Página {0}/{1} - Total Registros {2}",
                gvListaEstablecimientos.PageIndex + 1, gvListaEstablecimientos.PageCount,
                ((List<EstablecimientoDto>)gvListaEstablecimientos.DataSource).Count);
            btnAnteriorPag.Visible = (gvListaEstablecimientos.PageIndex > 0);
            btnSiguientePag.Visible = (gvListaEstablecimientos.PageIndex < gvListaEstablecimientos.PageCount - 1) &&
                             (gvListaEstablecimientos.PageCount > 1);
            lblSinCliente.Visible = gvListaEstablecimientos.Rows.Count == 0;
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton regresar en la confirmación
        /// de la edicion del establecimiento </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnRegresarConfirmacionEditarEstablecimientoOnClick(object sender, EventArgs e)
        {
            mvAdministrarEstablecimiento.SetActiveView(vEditarEstablecimiento);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton aceptar en la confirmación
        /// de la edicion del establecimiento </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnAceptarConfirmacionEditarEstablecimientoOnClick(object sender, EventArgs e)
        {
            _presentador.EditarEstablecimiento();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton cancelar en el flujo buscar </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnCancelarBuscarEstablecimientoOnClick(object sender, EventArgs e)
        {
            Response.Redirect("AdministrarEstablecimiento.aspx");
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de buscar establecimiento </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnBuscarEstablecimientoOnClick(object sender, EventArgs e)
        {
            _presentador.BuscarEstablecimiento();
            ConfigurarControles();
            grid_busqueda.Visible = true;
        }

        #endregion

        #region Propiedades

        /// <summary> Propiedad que retorna el control que maneja las diferentes vistas </summary>
        public MultiView Paneles
        {
            get { return mvAdministrarEstablecimiento; }
        }


        /// <summary> Propiedad que retorna el control que muestra el detalle de un cliente </summary>
        public View VistaDetalle
        {
            get { return vDetalleEstablecimiento; }
        }


        /// <summary> Propiedad que retorna el control que muestra el mensaje de error </summary>
        public View VistaError
        {
            get { return vMensajeError; }
        }


        /// <summary> Propiedad que retorna el control que muestra el mensaje de exito </summary>
        public View VistaExito
        {
            get { return vMensajeExito; }
        }


        /// <summary> Propiedad que retorna el control que muestra los controles para la modificacion </summary>
        public View VistaModificacion
        {
            get { return vEditarEstablecimiento; }
        }


        /// <summary> Propiedad que retorna el control que muestra la vista de confirmacion </summary>
        public View VistaConfirmacion
        {
            get { return vConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra la vista principal </summary>
        public View VistaPrincipal
        {
            get { return vListarEstablecimiento; }
        }


        /// <summary> Propiedad que obtiene el control que lista los establecimientos</summary>
        public ClickLandGridView ListaEstablecimiento
        {
            get { return gvListaEstablecimientos; }
        }


        /// <summary> Propiedad que obtiene el control que lista los tipos de establecimientos para la busqueda </summary>
        public ClickLandDropDownList ListaTipoEstablecimiento
        {
            get { return ddlTipoBusqueda; }
        }


        /// <summary> Propiedad que obtiene el control que indica la direccion a buscar </summary>
        public ClickLandExTextBox DireccionBusqueda
        {
            get { return tbDireccionBusqueda; }
        }


        /// <summary> Propiedad que obtiene el control que indica el Tipo de Establecimiento en el Detalle </summary>
        public ClickLandLabel TipoEstablecimientoDetalle
        {
            get { return lblTipoEstablecimientoDetalle; }
        }


        /// <summary> Propiedad que obtiene el control que indica el numero de local en el Detalle </summary>
        public ClickLandLabel NumeroLocalDetalle
        {
            get { return lblNumeroDeLocalDetalle; }
        }


        /// <summary> Propiedad que obtiene el control que indica el precion de Establecimiento en el Detalle </summary>
        public ClickLandLabel PrecioDetalle
        {
            get { return lblPrecioLocalDetalle; }
        }


        /// <summary> Propiedad que obtiene el control que indica la direccion del Establecimiento en el Detalle </summary>
        public ClickLandLabel DireccionDetalle
        {
            get { return lblDireccionDetalle; }
        }


        /// <summary> Propiedad que retorna el control para manejar los tipos de establecimientos </summary>
        public DropDownList DdlTipoEstablecimiento
        {
            get { return ddlTipoEstablecimiento; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el numero del establecimiento </summary>
        public TextBox TbNumeroLocal
        {
            get { return tbNumeroLocal; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el precio del establecimiento</summary>
        public TextBox TbPrecio
        {
            get { return tbPrecio; }
        }


        /// <summary> Propiedad que retorna el control donde se indica la direccion del establecimiento </summary>
        public TextBox TbDireccion
        {
            get { return tbDireccion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el  establecimiento en la confirmacion </summary>
        public Label LblTipoEstablecimientoConfirmacion
        {
            get { return lblTipoEstablecimientoConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el numero del establecimiento en la confirmacion </summary>
        public Label LbNumeroLocalConfirmacion
        {
            get { return lblNumeroDeLocalConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el precio del establecimiento en la confirmacion </summary>
        public Label LbPrecioConfirmacion
        {
            get { return lblPrecioLocalConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra la direccion del establecimiento en la confirmacion </summary>
        public Label LbDireccionConfirmacion
        {
            get { return lblDireccionConfirmacion; }
        }
        #endregion
    }
}